..:: Menu ::.. ..:: Piszemy wygaszacz ekranu w stylu Matrixa ::.. ..::Info i Reklamy::..

Piszemy wygaszacz ekranu

Standardowy wygaszacz Windows posiada rozszerzenie *.scr. Musi je posiadać :) Nic prostszego. Wystarczy zmienić rozszerzenie na *.scr i skopiować program do katalogu Windows. Nie jest to takie łatwe. Trzeba bowiem oprogramować zdarzenie "OnMouseMove" odpowiadające za ruchy myszką oraz "OnKeyPress" odpowiadające za naciśnięcie przycisku klawiatury. Nasz wygaszacz ekranu będzie się nazywał "Matrix". Pokazywał on będzie i zsuwał napisany tak jak w Matrixie :)
Zacznijmy więc:
1. Przede wszystkim zmień właściwość "WindowState" formy na "wsMaximized". Spowoduje to, że forma będzie wyświetlana na całym ekranie.
2. Zmień właściwość "BorderStyle" na "bsNone". To powoduje ukrycie paska głównego formy.
3. Teraz trzeba się zabezpieczyć przed ponownym uruchamianiem tego samego egzemplarza programu. W "OnCreate" wpisz na początek taki tekst:

procedure TMainFrm.FormCreate(Sender: TObject);
var
H : THandle;
begin
H := CreateFileMapping(THANDLE($FFFFFFFF),nil,
PAGE_READONLY,0,32,'Screen');
{ Jezeli aplikacja jest uruchomiona ( ALREADY_EXISTS ) to zamknij
druga }
if GetLastError=ERROR_ALREADY_EXISTS then
begin
Application.Terminate;
CloseHandle(H);
end;

Color := clBlack; // kolor tla
ShowCursor(FALSE); // ukryj kursor
end;
Omówienie początku tej procedury wykracza poza obszar niniejszego kursu. :) Następuje tutaj utworzenie obiektu. Gdyż jeynim błędem wykorzystania tej funkcji to może być błąd: "ERROR_ALREADY_EXISTS" ( program jest już w pamięci ) to dzięki temu można kontrolować ponowne uruchamianie programu. Jeżeli chcesz możesz o tym poczytać w Helpie ( wiem, że nie wszyscy znają perfekto anglika, ale.. ). Ta funkcja nazywa się tworzenie "obiektu odwzorowującego". O tym być może będziemy mówić kiedyś w Kurs Delph dla zaawansowanych" :)) A więc dzięki tej funkcji możesz kontrolować ponowne uruchamianie tego samego programu i odpowiednio zareagować. W tym wypadku zamykany zostaje program, który ponownie próbujesz uruchomić.
Na samym końcu tej funkcji następuje zmiana koloru tła oraz ukrycie kursora. Tak funkcja "ShowCursor" pokazuje kursor ( parametr: True ) lub ukrywa ( False ).
Teraz kolejna, a zarazem ostatnia funkcja "OnActivate". Uzupełnij więc procedurę "OnActivate" formy - wpisz taki text:
procedure TMainFrm.FormActivate(Sender: TObject);
var
X, I, Count : Integer;
Chars : Char; // zmienna oznaczajca znak ( pojedynczy )
begin
Count := 0; // wyzeruj licznik
while not (Done) do // Jezeli animacja jest uruchomiona...
begin
Canvas.Brush.Color := clBlack; // ustaw kolor tła
Randomize; // wylosuj
X := Random(Screen.DesktopWidth); // losuj pozycje
Canvas.Font.Color := RGB(25, 255, 0); // ustaw kolor czcionki
Canvas.Font.Size := 12; // rozmiar czcionki

Inc(Count); // podnieś o jeden
if Count = 30 then // Jezeli licznik rowna sie cyfrze 30...
begin
Repaint; //... odswiez ekran
Count := 0; // wyzeruj licznik
end;

{ Wykonuj petle. Zacznij od zera i kontynuuj do wylosowanego punktu }

For I := 0 to Random(Screen.DesktopHeight) + 100 do
BEGIN
Application.ProcessMessages;
Sleep(2);
Chars := Chr(Random(255)); // losuj znak
Canvas.TextOut(X, I, Chars); // spuszczaj :) znak
if (Done) then // Jezeli Done = True to przerwij...
Break;
END;
end;
end;
Ta procedura odpowiada za rysowanie znaku i odpowiednie go spuszczanie :)) z góry na dół. W procedurze zadeklarowany został także licznik który zlicza ilość wykonanych pętli ( czyli mówiąc inaczej: ilość spuszczonych pasków liter ). Aha! Byłbym zapomniał: musisz jeszcze zadeklarować zmienną "Done", która będzie typu "Boolean". Będzie ona odpowiadała za to, czy animacja jest uruchomiona, czy też nie. No, ale przejdźmy do omawiania naszej procedury. Następuje tam odpowiednie ustawianie rozmiarów czcionki. Później uruchomiona jest procedura losowania ( Randomize ), a następnie losowana zostaje pozycja "X". Zmienna "X" przechowuje wylosowaną liczbę. Liczba ta określa położenie X paska, który będzie zsuwany. Ta liczba losowana jest z zakresu szerokości pulpitu. Następnie wybierany będzie kolor czcionki. Kolor będzie tak jak w Matrixie. Tak jak mówiłem wykorzystany tutaj jest parametr RGB, który oznacza kolory ( czerwony, zielony, niebieski ). W nawiasach podawane są odcienie tychże kolorów. Kolor czerwony ustawiłem o małe natężenie. Kolor zielony na jak najbardziej jaskrawy, a niebieski na 0. Później funkcja "Inc". Ta funkcja to odpowiednik:
X := X + 1 znaczy to samo co Inc(x);
X := X - 1 znaczy to samo co Dec(x);
Czyli krótko mówiąc podnosi ona cyfrę w nawiasie o jeden. Następnie następuje sprawdzenie jaki jest parametr zmiennej "Count". Jeżeli wynosi ona 30 tzn., że spuszczono już 30 pasków. Wtedy odśwież obraz i wyzeruj licznik.
Na samym końcu wykonaj pętle. Następuje tutaj spuszczanie pasku od 0 do wylosowanej pozycji Y. Pozycja Y losowana jest z zakresu wysokości pulpitu. Do tej wartości dodawana jest cyfra 100, która zapewnia odpowiednią długość paska. Zmienna "Chars" to zmienna typu "Char", która przechowuje pojedynczy znak. Następnie procedura "Chr" . Czyli do zmiennej "Char" przypisany jest losowany z zakresu 255 znak. Następnie znak ten jest spuszczany na dół.
Kod źródłowy w dziale Download.

   
©Copyright by garUs